﻿

using Chapter04.DesignMode2;

/**
 * 4 工厂模式
 * 烘烤OO的精华
 * 识别变化的方面
 * 但是你需要更多比萨类型……
 * 但是压力来自于增加更多的比萨类型
 * 封装创建对象的代码
 * 建立一个简单比萨工厂
 * 重做PizzaStore类
 * 定义简单工厂
 * 加盟比萨店
 * 给比萨店使用的框架
 * 允许子类做决定
 * 让我们开一定比萨店吧！
 * 声明一个工厂方法
 * 如何利用比萨工厂方法订购比萨
 * 看看如何根据订单生产这些比萨……
 * 刚刚忽略了一件事：比萨本身！
 * 你已经等得够久了，来吃些比萨吧！
 * 认识工厂方法模式的时刻终于到了
 * 另一个观点：平行的类层级
 * 设计迷题
 * 定义工厂方法模式
 * 一个很依赖的比萨店
 * 看看对象依赖
 * 依赖倒置原则
 * 原则的应用
 * 倒置你的思考方式
 * 几个指导方针帮助你遵循引原则
 * 再回到比萨店……
 * 确保原料的一致
 * 原料家庭
 * 建造原料工厂
 * 创建纽约原料工厂
 * 重做比萨……
 * 继续重做比萨……
 * 再靠近一点
 * 再回到比萨店
 * 我们做了些什么？
 * 给Ethan和Joel更多的比萨
 * 接下来，就不一样了，因为我们现在使用了原料工厂
 * 定义抽象工厂模式
 * 这是一张相当复杂的类图；让我们从PizzaStore的观点来看一看它：
 * 工厂方法是不是潜伏在抽象工厂的里面？
 * 模式告白
 * 
 * OO基础
 * 抽象
 * 封装
 * 多态
 * 继承
 * 
 * OO设计原则
 * 封装变化，找出应用中可能需要变化之处，把这们独立出来，不要和那些不需要变化的代码混在一起
 * 多用组合，少用继承
 * 针对接口编程，而不是针对实现编程
 * 为了交互对象之间的松耦合设计而努力
 * 类应该对扩展开放，对修改关闭
 * 要依赖抽象，不要依赖具体类
 * 
 * OO模式
 * 简单工厂模式——
 * 工厂方法模式——定义了一个创建对象的接口，但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
 * 抽象工厂模式——提供一个接口，用于创建相关或依赖对象的家族，而不需要明确指定具体类。
 */
PizzaTestDrive.Run(args);